home *** CD-ROM | disk | FTP | other *** search
/ The CICA Windows Explosion! / The CICA Windows Explosion! - Disc 2.iso / nt / fioben.zip / CAT3.CPP < prev    next >
C/C++ Source or Header  |  1993-02-09  |  3KB  |  124 lines

  1. #include    <windows.h>
  2. #include    <iostream.h>
  3. #include    <iomanip.h>
  4. #include    <fstream.h>
  5. #include    <string.h>
  6.  
  7. ofstream    CERR("results.out", ios::app);
  8. int    BUFLEN = 0x10000;
  9.  
  10. ostream    & operator << (ostream & os, SYSTEMTIME & r)
  11. {
  12.     static    const char    * const rgszDayNames[] =
  13.         {
  14.         "Sunday",
  15.         "Monday",
  16.         "Tuesday",
  17.         "Wednesday",
  18.         "Thursday",
  19.         "Friday",
  20.         "Saturday",
  21.         0
  22.         };
  23.     char    chFill = os.fill();
  24.     os.fill('0');
  25.     os //--------------------------------- << rgszDayNames[r.wDayOfWeek] << ' '
  26.         << setw(2) << r.wMonth << '/'
  27.         << setw(2) << r.wDay << '/'
  28.         << setw(2) << r.wYear << ' '
  29.         << setw(2) << r.wHour << ':'
  30.         << setw(2) << r.wMinute << ':'
  31.         //------------------- << setw(2) << r.wSecond
  32.         ;
  33.     os.fill(chFill);
  34.     return    os;
  35. }
  36.  
  37. void    cat2(HANDLE h, HANDLE hOut)
  38. {
  39.     HANDLE    hMap = CreateFileMapping(h, 0, PAGE_READONLY, 0,0, 0);
  40.     if (0 == hMap)
  41.         {
  42.         CERR << GetLastError() << ": error in CreateFileMapping." << endl;
  43.         return;
  44.         }
  45.     LPVOID    pView = MapViewOfFile(hMap, FILE_MAP_READ, 0,0, 0);
  46.     if (0 == pView)
  47.         {
  48.         CERR << GetLastError() << ": error in MapViewOfFile()." << endl;
  49.         CloseHandle(hMap);
  50.         return;
  51.         }
  52.     DWORD    dwNothing, dwFileSizeLo = GetFileSize(h, &dwNothing);
  53.     const    char    *pOut = (char *)pView;
  54.     while (dwFileSizeLo)
  55.         {
  56.         if (!WriteFile(hOut, (const void *)pOut, dwFileSizeLo, &dwNothing, 0))
  57.             {
  58.             CERR << GetLastError() << ": error in WriteFile()." << endl;
  59.             break;
  60.             }
  61.         dwFileSizeLo -= dwNothing;
  62.         pOut += dwNothing;
  63.         }
  64.     UnmapViewOfFile(pView);
  65.     CloseHandle(hMap);
  66. }
  67. void cat(HANDLE h, HANDLE hOut)
  68. {
  69.     char    szBuf[8192];
  70.     DWORD    nBytes;
  71.     while (ReadFile(h, szBuf, sizeof(szBuf), &nBytes, 0) && nBytes)
  72.         {
  73.         DWORD    nWritten;
  74.         if (!WriteFile(hOut, szBuf, nBytes, &nWritten, 0) )
  75.             {
  76.             CERR << GetLastError() << ": error in WriteFile. "
  77.                 << nBytes << " read, " << nWritten << " written."
  78.                 << endl;
  79.             // return;
  80.             }
  81.         }
  82. }
  83.  
  84. int main(int argc, char **argv)
  85. {
  86.     SYSTEMTIME    sNow;
  87.     GetLocalTime(&sNow);
  88.     CERR << sNow << "===> " << GetCommandLine() << endl;
  89.     HANDLE    hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
  90.     if (INVALID_HANDLE_VALUE == hStdout)
  91.         {
  92.         CERR << GetLastError() << ": error opening con for writing."
  93.             << endl;
  94.         return    4;
  95.         }
  96.     if (argc < 2)
  97.         {
  98.         cat(GetStdHandle(STD_INPUT_HANDLE), hStdout);
  99.         return    0;
  100.         }
  101.     DWORD    dwStart = GetTickCount();
  102.     for (int iArg = 1; iArg < argc; iArg++)
  103.         {
  104.         HANDLE    fp = CreateFile(argv[iArg], GENERIC_READ,
  105.             FILE_SHARE_READ | FILE_SHARE_WRITE, 0,
  106.             OPEN_EXISTING, 0, 0);
  107.         if (INVALID_HANDLE_VALUE == fp)
  108.             {
  109.             CERR << GetLastError() << ": error opening file "
  110.                 << argv[iArg] << " for reading." << endl;
  111.             continue;
  112.             }
  113.  
  114.         cat2(fp, hStdout);
  115.         CloseHandle(fp);
  116.         }
  117.     dwStart = GetTickCount( ) - dwStart;
  118.      CERR << "**** Total time: " << (dwStart / 1000)
  119.         << '.' << (dwStart % 1000) << " seconds."
  120.         << endl;
  121.     return    0;
  122. }
  123.  
  124.